#ifndef __WIZ_UTILS_TICKER_OBJECT_HPP__SHANHAOBO_19800429__
#define __WIZ_UTILS_TICKER_OBJECT_HPP__SHANHAOBO_19800429__

#include "../../Core/Container/WizDataTypeSet.hpp"
#include "../../DataType/Signal/WizDataTypeSignal.hpp"

namespace Wiz
{
    namespace Ticker
    {
        template<class ParamT> class Type;

        namespace Object
        {
            template<class TimeT>
            class WIZ_EXPORT Type : protected ::Wiz::Signal::Safe::Object::Type<::Wiz::Void::Type(const TimeT&)>
            {
                WIZ_DECLARE_CLASS_THIS(Type);
            protected:
                typedef TimeT                                                       tTime;
                typedef ::Wiz::Ticker::Type<tTime>                                  tTicker;
                typedef ::Wiz::Void::Type(tThis::*tDoTick)(const tTime&);
            protected:
                friend class ::Wiz::Ticker::Type<tTime>;
            public:
                Type(tTicker* TPtr);
                virtual ~Type();
            public:
                tDoTick GetDoTick() const
                {
                    return &tThis::DoTick;
                }
            protected:
                virtual ::Wiz::Void::Type DoTick(const tTime& DeltaTime);
            public:
                const tTime& TotalTime() const;
            protected:
                virtual ::Wiz::Void::Type Tick(const tTime&);
            protected:
                tTime        m_TotalTime;
            };
        } /// end of namespace Object
    } /// end of namespace Ticker
} /// end of namespace Wiz

#endif /*__WIZ_UTILS_TICKER_OBJECT_HPP__SHANHAOBO_19800429__*/
